package com.example.registerdemo.service.impl;

import com.example.registerdemo.common.UUIDUtils;
import com.example.registerdemo.entity.User;
import com.example.registerdemo.mapper.UserMapper;
import com.example.registerdemo.service.EmailService;
import com.example.registerdemo.service.UserService;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.Map;

@Service
@Transactional
public class UserServiceImpl implements UserService {
    
    @Autowired
    private UserMapper userMapper;

//    @Resource
//    private RabbitTemplate rabbitTemplate;

    @Resource
    private RedisTemplate redisTemplate;

    /**
     * 注入邮件接口
     */
    @Autowired
    private EmailService mailService;

    /**
     * 用户注册，同时发送一封激活邮件
     *
     * @param user
     */
    @Override
    public void register(User user) {
        int register = userMapper.register(user);

        String username = user.getUsername();
        System.out.println("名"+username);
        //获取激活码
        String code = (String) redisTemplate.opsForValue().get(username);
//        System.out.println("code:" + code);
        //主题
        String subject = "来自激活用户认证的邮件";

        //user/checkCode?code=code(激活码)是我们点击邮件链接之后根据激活码查询用户，如果存在说明一致，将用户状态修改为“1”激活
        //上面的激活码发送到用户注册邮箱
        //**************************************本地测试的路径 会失效。**************************************************************
        //String context = "<a href=\"/user/checkCode?code="+code+"\">激活请点击:"+code+"</a>";
        //String context = "<a href=\"http://localhost:8080/user/checkCode?code="+code+"\">激活请点击:"+code+"</a>";
        //*************************************************************************************************************************

        //user/checkCode?code=code(激活码)是我们点击邮件链接之后根据激活码查询用户，如果存在说明一致，将用户状态修改为“1”激活
        //上面的激活码发送到用户注册邮箱

        //方式1 注意看上述说明        //注意:此处的链接地址,是项目内部地址,如果我们没有正式的服务器地址,暂时无法从qq邮箱中跳转到我们自己项目的激活页面(如不服务器测试 把上面本地代码链接注释)
        String context ="<a href=\"http://localhost:8080/user/checkCode?username="+username+"&& code="+code+"\">激活请点击:"+code+"</a>";
//        rabbitTemplate.convertAndSend("directExchange","aa",cobt);
        //方式2 注意看上述说明(如不服务器测试 把上面本地代码取消注释)
        //String context = "<a href='服务端地址/user/checkCode?code='+code+'>激活用户认证请点击=> '+code+'</a>";
        //发送激活邮件
        mailService.sendHtmlMail(user.getUseremail(), subject, context);
    }

    /**
     * 根据激活码code进行查询用户，之后再进行修改状态
     *
     * @param
     * @return
     */
    @Override
    public User checkCode(String  username) {

        return userMapper.checkCode(username);
    }

    /**
     * 激活账户，修改用户状态
     *
     * @param user
     */
    @Override
    public void updateUserStatus(User user) {
        userMapper.updateUserStatus(user);
    }

    /**
     * 登录
     *
     * @param user
     * @return
     */
    @Override
    public User loginUser(User user) {
        User user1 = userMapper.loginUser(user);
        if (user1 != null) {
            return user1;
        }
        return null;
    }
}
